package com.choosefine.it.common.scheduled;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.choosefine.it.common.def.ResultCode;
import com.choosefine.it.worker.service.WorkerSalaryMonthService;

/**
 * 工作考勤，定时任务处理业务
 * 
 * @auth liaozhanggen 2016-11-24 下午4:54:15
 *
 */
@Component
public class WorkAttendanceScheduledTask {

	private Logger logger = LoggerFactory.getLogger(WorkAttendanceScheduledTask.class);

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    @Autowired
    private WorkerSalaryMonthService workerSalaryMonthService;
   
   
    /**
	 *  此方式：根据新增加的考勤记录进行月的统计；目前暂没考虑过 统计之后的修改日考勤场景
    * 后期要么根据当前系统的月去统计，每位工人的月考勤,这样的话耗资源
	 * 
	 * @auth liaozhanggen 2016-11-30 下午2:04:10
	 */
	@Scheduled(cron="0 0 10,11,23 * * ?")
	public void queryWorkerSalaryMonthCalc(){
		String messgae = null;
		long startTime = System.currentTimeMillis();
//		logger.info("--start---WorkAttendanceScheduledTask------>" + startTime);
		try {
			Map<String, String> param = new HashMap<String, String>();
			param.put("message", "start");
			messgae = workerSalaryMonthService.saveWorkerSalaryMonthCalc(param);
			if (ResultCode.MSG_SUCCESS.equalsIgnoreCase(param.get("message"))) {
				logger.info("-----WorkAttendanceScheduledTask------>" + param.get("message")+ "," + messgae + ",消耗时间：" + (System.currentTimeMillis()-startTime));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
//		logger.info("--end-----queryWorkerSalaryMonthCalc-------->" + messgae);
	}
	

	/**
	 * 一个cron表达式有至少6个（也可能7个，6个比7个少元素秒）由空格分隔的时间元素。
		
		从左往右按顺序依次为 
		
		秒（0~59）----
		分（0~59） 
		时（0~23）
		日（0~31，但是你需要考虑你月的天数）
		月（0~11）
		周（0~6 0=SUN 或 SUN，MON，TUE，WED，THU，FRI，SAT）
		年（1970－2099）

		"0 0 10,14,16 * * ?"                    每天上午10点，下午2点，4点
		"0 0 12 ? * WED"                        表示每个星期三中午12点
		"0 15 10 L * ?"                         每月最后一日的上午10:15触发
		"0 15 10 ? * 6L"                        每月的最后一个星期五上午10:15触发
		"0 15 10 ? * 6#3"                       每月的第三个星期五上午10:15触发
	 */
}